﻿using System;

namespace QldtSdh.GUI.DuLieu
{
    using BLL;
    using DAL.Models;
    using QldtSdh.GUI.Common;
    using QldtSdh.GUI.Utils;

    public partial class FormQuanLyDeTaiLuanVan_ChiTiet : BaseDialog
    {
        private DeTai _DeTai;
        private bool _DangTaoMoi;
        public int EffectedObjects { get; private set; }

        public FormQuanLyDeTaiLuanVan_ChiTiet(DeTai deTai = null)
        {
            InitializeComponent();
            this._DeTai = deTai;

            _DangTaoMoi = deTai == null;
            chkTiepTucBoSung.Visible = _DangTaoMoi;
            if (_DangTaoMoi)
            {
                _DeTai = new DeTai();
                chkTiepTucBoSung.Checked = true;
                this.Text = "Bổ sung thông tin Đề tài...";
            }
            else
                this.Text = "Cập nhật thông tin đề tài...";

            // Nạp danh sách các loại đề tài
            cbxLoaiDeTai.DisplayMember = "TenLoaiDeTai";
            cbxLoaiDeTai.ValueMember = "MaLoaiDeTai";
            cbxLoaiDeTai.DataSource = BizDeTai.GetListLoaiDeTai();

            DisplayObjectToGui();

            EffectedObjects = 0;
        }

        private void DisplayObjectToGui()
        {
            try
            {
                cbxLoaiDeTai.SelectedValue = _DeTai.MaLoaiDeTai;
            }
            catch { }
            txtTenDeTai.Text = _DeTai.TenDeTai;
            txtNguoiThucHien.Text = _DeTai.NguoiThucHien;
            txtNamThucHien.Text = _DeTai.NamThucHien;
            txtNamBaoVe.Text = _DeTai.NamBaoVe;
            txtGhiChu.Text = _DeTai.GhiChu;
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            #region Thu thập dữ liệu
            ep.Clear();

            var hasError = false;
            var tenDeTai = txtTenDeTai.Text.Trim();
            if (string.IsNullOrEmpty(tenDeTai))
            {
                hasError = true;
                ep.SetError(txtTenDeTai, "Không được bỏ trống tên đề tài");
            }

            var nguoiThucHien = txtNguoiThucHien.Text.Trim();
            if (string.IsNullOrEmpty(nguoiThucHien))
            {
                hasError = true;
                ep.SetError(txtNguoiThucHien, "Không được bỏ trống người thực hiện");
            }

            if (cbxLoaiDeTai.SelectedValue == null)
            {
                hasError = true;
                ep.SetError(cbxLoaiDeTai, "Phải chọn loại đề tài");
            }
            var maLoaiDeTai = cbxLoaiDeTai.SelectedValue.ToString();

            var stNamThucHien = txtNamThucHien.Text.Trim();
            int namThucHien = -1;
            if (string.IsNullOrEmpty(stNamThucHien) == false)
            {
                try
                {
                    namThucHien = Convert.ToInt32(stNamThucHien);
                    if (1990 > namThucHien || namThucHien > 2050)
                        throw new Exception("");
                }
                catch
                {
                    ep.SetError(txtNamBaoVe, "Năm thực hiện đề tài phải là số tự nhiên trong khoảng 1990-2050");
                    hasError = true;
                }
            }
            var stNamBaoVe = txtNamBaoVe.Text.Trim();
            int namBaoVe = -1;
            if (string.IsNullOrEmpty(stNamBaoVe) == false)
            {
                try
                {
                    namBaoVe = Convert.ToInt32(stNamBaoVe);
                    if (1990 > namBaoVe || namBaoVe > 2050)
                        throw new Exception("");
                }
                catch
                {
                    ep.SetError(txtNamBaoVe, "Năm bảo vệ đề tài phải là số tự nhiên trong khoảng 1990-2050");
                    hasError = true;
                }
            }
            if (namBaoVe != -1 && namThucHien != -1 && namBaoVe < namThucHien)
            {
                ep.SetError(txtNamBaoVe, "Năm bảo vệ phải lớn hơn Năm thực hiện đề tài");
                hasError = true;
            }

            if (hasError)
                return;
            #endregion

            #region Thực hiện lưu dữ liệu
            try
            {
                if (_DangTaoMoi)
                {
                    BizDeTai.Insert(System.Guid.NewGuid().ToString(),
                        tenDeTai, nguoiThucHien, maLoaiDeTai, stNamThucHien, stNamBaoVe);
                    EffectedObjects++;
                    Program.FormMain.Notify("Tạo mới đề tài", "Đã ghi mới một đề tài vào hệ thống");
                    if (chkTiepTucBoSung.Checked)
                    {
                        _DeTai = new DeTai();
                        DisplayObjectToGui();
                    }
                    else
                        this.Close();
                }
                else
                {
                    BizDeTai.Update(_DeTai.MaDeTai,
                        tenDeTai, nguoiThucHien, maLoaiDeTai, stNamThucHien, stNamBaoVe);
                    EffectedObjects++;
                    //Program.FormMain.Notify("Cập nhật đề tài", "Đã cập nhật thông tin đề tài thành công");
                    this.Close();
                }
            }
            catch (Exception exc)
            {
                if (_DangTaoMoi)
                    DialogUtils.ShowErrorWithDefaultTitle("Không thể tạo mới đề tài được.\nChi tiết lỗi: {0}", exc);
                else
                    DialogUtils.ShowErrorWithDefaultTitle("Không thể cập nhật đề tài được.\nChi tiết lỗi: {0}", exc);
            }
            #endregion
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
